package com.tedu.api;

import org.junit.Test;

import javax.security.auth.callback.LanguageCallback;
import java.text.ParseException;

/**
 * Java万物皆对象  --》真的是面向对象吗--》不全是【八大基本数据类型】
 * 对象【类创建对象，调用属性，方法】
 * 8个基础数据类型---本质类型---类---包装类【对象  通过点调用方法，属性】
 * 包装类不可以修改:final修饰类:无法继承
 * 八个包装类的方法基本通用
 * int       Integer     java.lang    继承Number
 * long      Long        java.lang    继承Number
 * double    Double      java.lang    继承Number
 * short     Short       java.lang    继承Number
 * float      Float      java.lang    继承Number
 * byte       Byte       java.lang    继承Number
 * char      Character   java.lang    继承Object
 * boolean   Boolean     java.lang    继承Object
 */
public class Packing {
    @Test
    public void test() {
        int i = 1;   //不是面向对象
        Integer a = new Integer(i);//面向对象
        a.toString();

    }

    /**
     * 包装类API
     * 抽象类Number  父类  Integer  Long  Double  Short  Float  Byte
     * xxxValue抽象方法:把基本数据类型转换成包装类的方法
     * intValue 方法    返回int变量
     * LongValue方法     返回long变量
     * doubleValue方法    返回double变量
     * shortValue 方法   返回short变量
     * floatValue方法  返回float变量
     * byteValue方法   返回byte变量
     * 需求:吧以上的6个数据类型   转换包装类   输出基本数据类型
     */
    @Test
    public void testValue() {
        //int打包--->包装类--取出---从包装类获取基础数据类型
        Integer i = new Integer("123");
        int is = i.intValue();  //从包装类  类型转换为int返回

        Integer t = new Integer("123");
        int si = t.intValue();

        System.out.println("Integer包装类:" + (is == si));
        //==对比  值
        System.out.println("Integer包装类:" + i.equals(t));
        //.equals对比对象   确定对象是否有值【包装类--实际值】  有实际值
        //其他五个基础数据类型包装类---打包  拆包

        Long l = new Long("123");
        long l1 = l.longValue();

        Double d = new Double("--");
        double d1 = d.doubleValue();

        Short s = new Short("44");
        short s1 = s.shortValue();

        Float f = new Float("==");
        float f1 = f.floatValue();

        Byte b = new Byte("/");
        byte b1 = b.byteValue();

    }

    /**
     * XXXValue抽象方法-----静态方法【打包  拆包】
     * 包装类.valueOf("对应类型")
     * <p>
     * 打包:对应包装类中存在对应的类型
     * 拆包:对应包装类  类型   去除
     */
    @Test
    public void testValueOf() {
        int i = Integer.valueOf("123");//类名点出来:静态方法【Number抽象
        double d = Double.valueOf("123.123");
        boolean b = Boolean.valueOf("321");
        char c = Character.valueOf('i');
        float f = Float.valueOf("12345");
        byte b1 = Byte.valueOf("67");
        short s = Short.valueOf("00");
        long l = Long.valueOf("88");
    }

    /**
     * parse xxx   静态方法
     * 作用:将字符串转换为对应的类型;
     * 参数--字符串--给字符串转换为数据类型
     * 注意:字符串随便写   不可以随便解析或对应类型
     */
    @Test
    public void testParseXXX() {
        //1.吧基本数据类型转换为字符串
        String s = String.valueOf("2");
        //2.将字符串转换为基础数据类型
        String s2 = "2";
        System.out.println(s2 + "打桩");
        int i = Integer.parseInt(s2);
        //需求:吧以下正确解析成功
        String s3 = "123.123";
        String s4 = "true";
        String s5 = "10L";//符合三种类型  Integer Byte Short
        String s6 = "a";//Character字符类型包装类:无法解析
        float f3 = Float.parseFloat(s3);
        System.out.println(s3 + "");

        boolean b4 = Boolean.parseBoolean(s4);
        System.out.println(s4 + "");

        Short sh5 = Short.parseShort(s5);
        System.out.println(sh5 + "");

        //   byte   b6=Byte.parseByte(s6);
        //  System.out.println(s6+"");

        //总结:1 字符类  无法正确地解析成对应的类型因为不存在char字符
        //      2字面量L/F   认为这是一个字符串  解析失败
    }

    /**
     * 包装类  自动拆装箱
     * JDK1.5  新特性  2004
     * JDK1.5   之前没有自动拆装箱
     */
    @Test
    public void test01() {
        //JDK1.5
        Integer in = Integer.valueOf("1");//输入类型转换为Integer
        int i = in.intValue();//把包装好的类型  基础数据类型取出
        // JDK1.5之前   定义方法编译器认可   并非JVM虚拟机认可
        Integer it = 1; //装箱
        int is = it;  //拆箱
        //自动拆卸箱实际上  吧拆箱与装箱的步骤交给idea执行
    }
}


















